﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using Informant.Contacts;

namespace Informant.ErrorHandling
{
	public class SmsException : Exception
	{
		#region Properties

		public IEnumerable<IPhone> RejectedRecipients { get; set; }

		#endregion

		#region Construction

		/// <summary>
		/// Initializes a new instance of the <see cref="SmsException"/> class.
		/// </summary>
		public SmsException() : base() { }
		/// <summary>
		/// Initializes a new instance of the <see cref="SmsException"/> class.
		/// </summary>
		/// <param name="message">The message.</param>
		public SmsException(String message) : base(message) { }
		/// <summary>
		/// Initializes a new instance of the <see cref="SmsException"/> class.
		/// </summary>
		/// <param name="message">The message.</param>
		/// <param name="rejectedRecipients">The rejected recipients.</param>
		public SmsException(String message, IEnumerable<IPhone> rejectedRecipients) : base(message) 
		{
			RejectedRecipients = rejectedRecipients;
		}
		/// <summary>
		/// Initializes a new instance of the <see cref="SmsException"/> class.
		/// </summary>
		/// <param name="message">The message.</param>
		/// <param name="inner">The inner.</param>
		public SmsException(String message, Exception inner) : base(message, inner) { }
		/// <summary>
		/// Initializes a new instance of the <see cref="SmsException"/> class.
		/// </summary>
		/// <param name="message">The message.</param>
		/// <param name="rejectedRecipients">The rejected recipients.</param>
		/// <param name="inner">The inner.</param>
		public SmsException(String message, IEnumerable<IPhone> rejectedRecipients, Exception inner) : base(message, inner)
		{
			RejectedRecipients = rejectedRecipients;
		}
		/// <summary>
		/// Initializes a new instance of the <see cref="SmsException"/> class.
		/// </summary>
		/// <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
		/// <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
		/// <exception cref="T:System.ArgumentNullException">
		/// The <paramref name="info"/> parameter is null.
		/// </exception>
		/// <exception cref="T:System.Runtime.Serialization.SerializationException">
		/// The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0).
		/// </exception>
		protected SmsException(SerializationInfo info, StreamingContext context) : base(info, context) { }

		#endregion
	}
}
